#ifndef __TASKQUEUE_H__
#define __TASKQUEUE_H__
#include <stdlib.h>
#include <strings.h>
#include "../log/log.h"
#include "../dir/clientSession.h"


// 任务队列节点
typedef struct task_node_s
{
    clientSession_t *session;  // 用户会话信息
    struct task_node_s *next; // 指向下一个节点
} task_node_t;

// 任务队列
typedef struct task_queue_s
{
    task_node_t *front; // 队头
    task_node_t *rear;  // 队尾
    int size;           // 队列大小
} task_queue_t;

/**
 * @brief 初始化任务队列
 *
 * @param q 需要初始化的任务队列
 */
void task_queue_init(task_queue_t *q);

/**
 * @brief 销毁任务队列，释放所有节点
 *
 * @param q 需要销毁的任务队列
 */
void task_queue_destroy(task_queue_t *q);

/**
 * @brief 创建任务节点
 *
 * @param node_buf_ptr 任务节点BUF指针的地址
 * @param session 用户会话信息
 * @return 创建结果，0表示成功，-1表示失败
 */
int task_node_create(task_node_t **node_buf_ptr, clientSession_t *session);

/**
 * @brief 将任务节点加入任务队列
 *
 * @param q 任务队列
 * @param node 任务节点
 * @param session 用户会话信息
 * @return 加入结果，0表示成功，-1表示失败
 */
int task_queue_enqueue(task_queue_t *q, clientSession_t *session);

/**
 * @brief 从任务队列中取出一个任务节点
 *
 * @param q 任务队列
 * @return 取出的任务节点，0表示成功，-1表示失败
 */
int task_queue_dequeue(task_queue_t *q);

#endif // __TASKQUEUE_H__